<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
        xmlns:p="http://primefaces.org/ui"
        xmlns:c="http://java.sun.com/jsp/jstl/core">
    <ui:composition template="template.xhtml">
        <ui:define name="content" >
            <h:form id="form1">
                <p:growl id="growl"/>
                
                <p:toolbar>
                    <p:toolbarGroup align="left">  
                      <p:menuButton value="Relatorios">  
                        <p:menuitem value="Produtos" onclick="relatorioProdutos.show()"/>
                        <p:menuitem value="Clientes" onclick="relatorioClientes.show()"/>
                      </p:menuButton>  
                    </p:toolbarGroup>  
                    
                </p:toolbar>
                
                <p:dialog id="relatorioProdutos" widgetVar="relatorioProdutos" modal="true">
                    <p:outputLabel value="De"/>
                    <p:calendar id="ini" value="#{relatorio.inicio}" size="15"/>
                    <p:outputLabel value="-"/>
                    <p:calendar id="fim" value="#{relatorio.fim}" size="15"/>
                    <p:commandButton value="Buscar" process="ini fim" update="produtoData" />
                    <f:facet name="header">  
                        Relatório de vendas de Produtos por Período.
                    </f:facet>
                    <p:dataTable id="produtoData"  var="prod" value="#{venda.listaProdutos}" rowKey="#{prod.id}">  
                        
                            <f:facet name="header">  
                               Vendas por Período
                            </f:facet> 
                            
                             <p:column id="nomeColumn" headerText="Produto">  
                               <f:facet name="header">  
                                    <h:outputText value="Nome" />  
                                </f:facet>    
                             <h:outputText value="#{prod.nome}"/>  
                             </p:column>
                             <p:column id="qtdeColumn" headerText="Quantidade">
                                <f:facet name="header">  
                                   <h:outputText value="Quantidade" />  
                               </f:facet>  
                               <h:outputText value="#{relatorio.totalProduto(prod)}"/>
                             </p:column>
                             
                    </p:dataTable>
                    <h:commandLink>  
                          <p:graphicImage value="/CSS/excel.png" />  
                          <p:dataExporter type="xls" target="produtoData" fileName="RelatorioClientes"/>  
                        </h:commandLink>  

                        <h:commandLink>  
                          <p:graphicImage value="/CSS/pdf.png" />  
                          <p:dataExporter type="pdf" target="clienteData" fileName="RelatorioClientes"/>  
                        </h:commandLink> 
                    
                    
                </p:dialog>
                
                <p:dialog id="relatorioClientes" widgetVar="relatorioClientes" modal="true">
                    <p:outputLabel value="De"/>
                    <p:calendar id="i" value="#{relatorio.inicio}" size="15" />
                    <p:outputLabel value="-"/>
                    <p:calendar id="f" value="#{relatorio.fim}" size="15"/>
                    <p:commandButton value="Buscar" process="i f" update="usuarioData"/>
                    <f:facet name="header">  
                      Vendas à Clientes por períodos.
                    </f:facet> 
                <p:dataTable id="usuarioData"  var="cli" value="#{cliente.listaClientes}" rowKey="#{cli.cpf}">  
                        
                            <f:facet name="header">  
                               Vendas por Período
                            </f:facet> 
                            
                             <p:column id="nomeColumn" headerText="Produto">  
                               <f:facet name="header">  
                                    <h:outputText value="Nome" />  
                                </f:facet>    
                                 <h:outputText value="#{cli.nome}"/>  
                             </p:column>
                             <p:column id="qtdeColumn" headerText="Quantidade">
                                <f:facet name="header">  
                                   <h:outputText value="Quantidade" />  
                               </f:facet>  
                               <h:outputText value="#{relatorio.totalCompras(cli)}"/>
                             </p:column>
                </p:dataTable>          
                    <h:commandLink>  
                          <p:graphicImage value="/CSS/excel.png" />  
                          <p:dataExporter type="xls" target="usuarioData" fileName="RelatorioClientes"/>  
                        </h:commandLink>  

                        <h:commandLink>  
                          <p:graphicImage value="/CSS/pdf.png" />  
                          <p:dataExporter type="pdf" target="usuarioData" fileName="RelatorioClientes"/>  
                        </h:commandLink> 
                    
                    
                </p:dialog>
                <p:tabView effect = "drop" id="tabView" widgetVar="tab" style="text-align: center;">
                    
                    <p:tab id="venda" title="Venda">
                                                
                        <p:dataTable id="tabelaProduto" var="prod" value="#{venda.listaProdutos}" filteredValue="#{venda.produtosFiltrados}"
                                     emptyMessage="Produto não Encontrado."  selectionMode="single" rowKey="#{prod.id}" selection="#{venda.produtoEscolhido}">  
                            
                            <f:facet name="header">  
                               Selecione os Produtos
                            </f:facet> 
                            
                             <p:column id="nomeColumn" filterBy="#{prod.nome}" sortBy="#{prod.nome}" headerText="Produto" filterMatchMode="contains">  
                                 <h:outputText value="#{prod.nome}"/>  
                             </p:column>
                            <p:column id="tipoColumn" filterMatchMode="exact" filterOptions="#{venda.tipos}" filterBy="#{prod.tipo == 'M'? 'Medicamento' : 'Cosmético'}" headerText="Tipo">  
                                 <h:outputText value="#{prod.tipo == 'M'? 'Medicamento' : 'Cosmético'}"/>  
                             </p:column>
                            <p:column id="valorColumn" sortBy="#{prod.valor}" headerText="Valor">
                                <h:outputText value="#{prod.valor}"/>
                            </p:column>
                        </p:dataTable>  
                        
                        <p:panelGrid columns="2" style="margin-left: 37%; margin-top: 15px;color: appworkspace;">   
                            <p:outputLabel value="Quantidade"/>
                            <p:inputMask mask="?999" id="quantidade" value="#{venda.quantidadeEscolhido}"/>
                        </p:panelGrid>
                        <p:commandButton value="Adicionar" ajax="false" actionListener="#{venda.adicionaProduto(this)}" style="width: 250px" update=":form1:tabView:tabelaProdutosSelecionados :form1:tabView:concluirvenda"/>
                        <p:separator style="margin: 30px; padding: 5px"/>
                        <p:dataTable id="tabelaProdutosSelecionados" var="selectedProd" value="#{venda.carrinho}" selectionMode="single" 
                                     rowKey="#{selectedProd.produto.id}" selection="#{venda.vendaEscolhidoRemover}" style="margin-top: 15px;" emptyMessage="Nenhum Produto Adicionado.">
                            
                            <f:facet name="header">  
                               Produtos Selecionados
                            </f:facet> 
                            
                            <p:column id="nomeColumnRemove" sortBy="#{selectedProd.produto.nome}" headerText="Produto" filterMatchMode="contains">  
                                 <h:outputText value="#{selectedProd.produto.nome}"/>  
                             </p:column>
                            <p:column id="tipoColumnRemove" sortBy="#{selectedProd.produto.tipo}" headerText="Tipo">  
                                 <h:outputText value="#{selectedProd.produto.tipo == 'M'? 'Medicamento' : 'Cosmético'}"/>  
                             </p:column>
                            <p:column id="quantidadeColumnRemove" sortBy="#{selectedProd.quantidade}" headerText="Quantidade">
                                <h:outputText value="#{selectedProd.quantidade}"/>
                            </p:column>
                            <p:column id="valorColumnRemove" sortBy="#{selectedProd.quantidade*selectedProd.produto.valor}" headerText="Valor">
                                <h:outputText value="#{selectedProd.quantidade*selectedProd.produto.valor}"/>
                            </p:column>                            
                            
                        </p:dataTable>
                        
                        <p:commandButton value="Remover" ajax="false" actionListener="#{venda.removeProduto(this)}" update=":form1:tabView:tabelaProdutosSelecionados"
                                         style="margin: 10px;width: 250px" />
                        <br/>
                        <p:outputLabel value="CPF do Cliente: "/>
                        <p:inputMask mask="999.999.999-99" id="cpfCompra" converter="CPFConverter" value="#{venda.cpfComprador}"/>
                        <p:commandButton value="Buscar" actionListener="#{venda.buscarCliente(event)}" oncomplete="confirmaCliente.show()" update=":form1:tabView:confirmaCliente"/>
                        <p:commandButton value="Concluir" actionListener="#{venda.validaVenda(event)}" update=":form1:growl :form1:tabView:concluivenda"/>
                        
                        <p:dialog id="confirmaCliente" widgetVar="confirmaCliente" modal="true">
                            <f:facet name="header">
                                Confirmação de Cliente
                            </f:facet>
                            <c:if test="#{venda.comprador == null}">
                                <h3>Nenhum Cliente encontrado com esse CPF</h3>
                            </c:if>
                            <c:if test="#{venda.comprador != null}">
                                <p:panelGrid columns="2">
                                    <p:outputLabel value="Nome: "/>
                                    <p:outputLabel value="#{venda.comprador.nome} "/>

                                    <p:outputLabel value="Telefone: "/>
                                    <p:outputLabel value="#{venda.comprador.telefone} "/>

                                    <p:commandButton value="Cancelar"  oncomplete="confirmaCliente.hide()" actionListener="#{venda.cancelarCliente(event)}"/>
                                    <p:commandButton value="Confirmar" oncomplete="confirmaCliente.hide()"/>
                                </p:panelGrid>
                             </c:if>                          
                        </p:dialog>
                        <p:dialog id="concluivenda"  widgetVar="concluivenda" modal="true" width="400" resizable="false">
                            <f:facet name="header">
                                Confirmação de Venda
                            </f:facet>
                           <c:if test="#{venda.comprador == null}">
                                <h3>Venda Avulsa</h3>
                            </c:if>
                            <c:if test="#{venda.comprador != null}">
                                <p:panelGrid columns="2" style="margin-left: 28%">
                                    <p:outputLabel value="Nome: "/>
                                    <p:outputLabel value="#{venda.comprador.nome} "/>

                                    <p:outputLabel value="Telefone: "/>
                                    <p:outputLabel value="#{venda.comprador.telefone} "/>                                  
                                </p:panelGrid>
                                <br/>
                                <p:outputLabel value="Valor total da venda:R$ #{venda.valorTotal}" style="font-size: 15px;"/><br/><br/>
                                <p:outputLabel value="Valor do desconto: #{venda.desconto}%" style="font-size: 15px;"/><br/><br/>
                             </c:if>
                            
                            <p:outputLabel value="Valor:R$ #{venda.valorAposDesconto(venda.valorTotal, venda.desconto)}" style="font-size: 15px"/>
                            <p:panelGrid columns="2" style="margin-top: 10%; margin-left: 25%;">
                                <p:commandButton value="Cancelar"  oncomplete="concluivenda.hide()"/>
                                <p:commandButton value="Confirmar" ajax="false" actionListener="#{venda.concluiVenda(event)}" oncomplete="concluivenda.hide()"/>
                         </p:panelGrid>   
                     </p:dialog> 
                        <p:dialog id="insereReceita"  widgetVar="insereReceita" modal="true" width="300" resizable="false">
                            <f:facet name="header">
                                Inserir Receita Médica
                            </f:facet>
                            <h3>Um ou mais Medicamentos adicionados exigem Receita Médica</h3><br/>
                            <p:panelGrid columns="2">
                                <p:outputLabel value="Nome do Médico:"/>
                                <p:inputText value="#{venda.nomeMedico}"/>
                                
                                <p:outputLabel value="CRM do Médico:"/>
                                <p:inputMask mask="?999999" value="#{venda.crmMedico}"/>
                                
                                <p:outputLabel value="Receita:"/>
                                <p:inputTextarea rows="4" value="#{venda.receitaMedica}"/>
                                 <p:commandButton value="Cancelar"  oncomplete="insereReceita.hide()"/>
                                 <p:commandButton value="Confirmar" oncomplete="insereReceita.hide()" actionListener="#{venda.inserirReceita(event)}"/>
                            </p:panelGrid>
                        </p:dialog>
                    </p:tab> 
                    
                    
                 <p:tab id="abaCliente" title="Cliente">
                        <h2> Cadastro de Cliente </h2>
                        <p:panelGrid columns="2" style="margin-left: 37%">
                            <p:outputLabel value="CPF:" for="cpfCliente"/>
                            <p:inputMask converter="CPFConverter" mask="999.999.999-99" id="cpfCliente" 
                                         value="#{cliente.obj.cpf}"/>
                            <p:outputLabel value="Nome:" for="nomeCliente"/>
                            <p:inputText  id="nomeCliente" value="#{cliente.obj.nome}"/>
                            
                         <p:outputLabel value="Telefone:" for="telefoneCliente"/>
                            <p:inputMask mask="(99)9999-9999" id="telefoneCliente" value="#{cliente.obj.telefone}"/>
                        </p:panelGrid> 
                        <p:commandButton id="buttonCadastrarCliente" actionListener="#{cliente.Salvar(this)}" ajax="false" value="Cadastrar" style="margin: 10px"/>
                         <p:separator/>   
                         
                         <h2>Remover Cliente</h2>
                         <p:dataTable id="tabCliente" var="cli" value="#{cliente.listaClientes}" filteredValue="#{cliente.clientesFiltrados}"
                                      emptyMessage="Cliente não Encontrado."  selectionMode="single" rowKey="#{cli.cpf}" selection="#{cliente.clienteEscolhido}">  
                            
                            <f:facet name="header">  
                               Selecione o Cliente para exclui-lo.
                            </f:facet> 
                            
                             <p:column id="cpfColumn" filterBy="#{cli.cpf}" sortBy="#{cli.cpf}" headerText="CPF" filterMatchMode="startsWith">  
                                 <h:outputText value="#{cli.cpf}"/>  
                             </p:column>
                            <p:column id="nomeColumn" filterMatchMode="contains" filterBy="#{cli.nome}" headerText="Nome">  
                                 <h:outputText value="#{cli.nome}"/>  
                             </p:column>
                        </p:dataTable>
                         <p:commandButton id="buttoDeletarCliente" value="Deletar" actionListener="#{cliente.Deletar(this)}" style="margin: 15px" update=":form1:tabView:tabCliente" ajax="false"/>
                    </p:tab>                    
                    
                    <p:tab id="abaProduto" title="Cadastrar Produto">
                        <h2>Cadastro de Produto</h2>
                        <p:panelGrid columns="2" style="margin-left: 37%">
                            <p:outputLabel value="Nome:" for="nomeProduto"/>
                            <p:inputText value="#{produto.obj.nome}" id="nomeProduto"/>
                            
                            <p:outputLabel value="Lote:" for="loteProduto"/>
                            <p:inputText value="#{produto.obj.lote}"  id="loteProduto"/>
                            
                            <p:outputLabel value="Fornecedor:" for="fornecedorProduto"/>
                            <p:inputText value="#{produto.obj.fornecedor}" id="fornecedorProduto"/>
                            
                            <p:outputLabel value="Fabricante:" for="fabricanteProduto"/>
                            <p:inputText value="#{produto.obj.fabricante}" id="fabricanteProduto"/>
                            
                            <p:outputLabel value="Valor:" for="valorProduto"/>
                            <p:inputText value="#{produto.obj.valor}" id="valorProduto" converter='DoubleConverter' converterMessage=""/>
                            
                        </p:panelGrid>
                        <p:selectOneRadio id="medicamento" value="#{produto.obj.tipo}" style="margin-left: 40%;padding: 5px;">
                            <f:selectItem itemLabel="Cosmético" itemValue='C'/>
                            <f:selectItem itemLabel="Medicamento" itemValue='M'/>
                            <p:ajax update=":form1:tabView:exigeReceita"/>
                        </p:selectOneRadio>
                        <p:panelGrid columns="2" style="margin-left: 40%;">
                            <p:outputLabel value="Exige Receita Médica?"/>
                            <p:selectBooleanCheckbox id="exigeReceita" value="#{produto.obj.exigeReceita}" disabled="#{produto.obj.tipo=='C'}"/>
                        </p:panelGrid> 
                        <p:commandButton value="Cadastrar" id="cadastrarProduto" ajax="false" actionListener="#{produto.Salvar(this)}" style="margin: 15px"/>
                        
                        <p:separator style="margin: 15px"/>
                        
                        <p:dataTable id="tabProduto" var="prod" value="#{venda.listaProdutos}" filteredValue="#{produto.produtosFiltrados}"
                                    emptyMessage="Produto não Encontrado."  selectionMode="single" rowKey="#{prod.id}" selection="#{produto.produtoEscolhido}">  
                            
                            <f:facet name="header">  
                               Selecione o Produto para exclui-lo.
                            </f:facet> 
                            
                           <p:column id="nomeProdutoColumn" filterBy="#{prod.nome}" sortBy="#{prod.nome}" headerText="Nome" filterMatchMode="contains">  
                                 <h:outputText value="#{prod.nome}"/>  
                           </p:column>
                           <p:column id="loteColumn" filterMatchMode="startsWith" filterBy="#{prod.lote}" headerText="Lote">  
                               <h:outputText value="#{prod.lote}"/>  
                           </p:column>
                           <p:column id="fabricanteColumn" filterMatchMode="startsWith" filterBy="#{prod.fabricante}" headerText="Fabricante">  
                               <h:outputText value="#{prod.fabricante}"/>  
                           </p:column>
                           <p:column id="fornecedorColumn" filterMatchMode="startsWith" filterBy="#{prod.fornecedor}" headerText="Fornecedor">  
                               <h:outputText value="#{prod.fornecedor}"/>  
                           </p:column>
                           <p:column id="tipoColumn" filterMatchMode="exact" filterOptions="#{venda.tipos}" filterBy="#{prod.tipo == 'M'? 'Medicamento' : 'Cosmético'}" headerText="Tipo">  
                               <h:outputText value="#{prod.tipo == 'M'? 'Medicamento' : 'Cosmético'}"/>  
                           </p:column>
                        </p:dataTable>
                        <p:commandButton value="Deletar Produto" id="deletarProduto"  ajax="false" actionListener="#{produto.deletar(this)}" style="margin: 15px"/>
                    </p:tab>
                    <p:tab id="abaUsuario" title="Cadastro de Usuários">
                        <h2>Cadastro de Usuário</h2>
                        <p:panelGrid columns="2" style="margin-left: 37%">
                            <p:outputLabel value="Nome:" for="nomeUsuario"/>
                            <p:inputText id="nomeUsuario" value="#{usuario.obj.nome}"/>
                            
                            <p:outputLabel value="Login:" for="loginUsuario"/>
                            <p:inputText id="loginUsuario" value="#{usuario.obj.login}"/>
                            
                            <p:outputLabel value="Senha:" for="senhaUsuario"/>
                            <p:password id="senhaUsuario" value="#{usuario.obj.senha}" feedback="true" promptLabel="Digite sua Senha."/>
                            
                        </p:panelGrid>
                        <p:commandButton value="Cadastrar" id="cadastrarUsuario" actionListener="#{usuario.Salvar(event)}" style="margin: 15px" ajax="false"/>
                        <p:separator style="margin: 15px"/>
                        <p:dataTable id="tabUsuario" var="usr" value="#{usuario.lista}" selectionMode="single" rowKey="#{usr.login}" selection="#{usuario.usuarioEscolhido}">  
                            
                            <f:facet name="header">  
                               Selecione o Usuario para exclui-lo.
                            </f:facet> 
                            
                             <p:column id="loginColumn" sortBy="#{usr.login}" headerText="Login">  
                                 <h:outputText value="#{usr.login}"/>  
                             </p:column>
                            <p:column id="nomeColumn" filterBy="#{usr.nome}" headerText="Nome">  
                                <h:outputText value="#{usr.nome}"/>  
                             </p:column>
                        </p:dataTable>
                        <p:commandButton value="Deletar Usuario" id="deletarUsuario"  ajax="false" actionListener="#{usuario.deletar(this)}" style="margin: 15px"/>
                    </p:tab>
                    
                    
                    
                </p:tabView>
            </h:form>
        </ui:define>
    </ui:composition>
</html>

